//
//  IFAAAuthentication.h
//  esand_cloud_ifaa
//
//  Created by ReidLee on 2018/6/15.
//  Copyright © 2018年 esandinfo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "IFAAResult.h"
#import "IFAABaseInfo.h"
#import "IFAACommon.h"

/**
 * IFAA 认证类
 */
@interface IFAAAuthentication : NSObject

/**
 * 初始化函数
 - param `IFAABaseInfo`
    - baseInfo IFAA 执行上下文 `IFAABaseInfo`
 */
- (id)initWithIFAABaseInfo:(IFAABaseInfo *) baseInfo;

/**
 * 认证初始化
 - return `IFAAResult`
     <table border="1">
         <tr>
             <th>可能的错误码</th>
             <th>内容</th>
             <th>备注</th>
         </tr>
         <tr>
             <td>"19"</td>
             <td>错误描述</td>
             <td>当前应用未获取Face ID权限</td>
         </tr>
         <tr>
             <td>"7"</td>
             <td>错误描述</td>
             <td>锁屏密码没设置</td>
         </tr>
         <tr>
             <td>"4"</td>
             <td>错误描述</td>
             <td>设备尚未录入任何指纹，此处可引导用户跳转到指纹界面录入指纹后再做认证处理</td>
         </tr>
         <tr>
             <td>"5"</td>
             <td>错误描述</td>
             <td>ifaa 尚未注册，不能执行认证操作</td>
         </tr>
         <tr>
             <td>"0"</td>
             <td>认证请求的报文</td>
             <td>需要把报文同步给服务器</td>
         </tr>
     </table>
 */
- (IFAAResult *) authInit;

/**
 * 执行认证操作

 - param
    - msg  认证请求报文
    - ifaaCallback 回调的 IFAAResult 参数可能有如下内容 `IFAACallback`
     <table border="1">
         <tr>
             <th>可能的错误码</th>
             <th>内容</th>
             <th>备注</th>
         </tr>
         <tr>
             <td>"9"</td>
             <td>错误描述</td>
             <td>返回的报文数据异常</td>
         </tr>
         <tr>
             <td>"8"</td>
             <td>异常信息</td>
             <td>异常信息有如下几种
                <ul>
                    <li>RESULT_USER_CANCEL</li>
                     <li>RESULT_NOT_SUPPORT</li>
                     <li>RESULT_SYSTEM_CANCEL</li>
                     <li>RESULT_PASSCODE_NOTSET</li>
                     <li>RESULT_NO_MATCH</li>
                     <li>RESULT_FALLBACK</li>
                      <li>RESULT_NOT_AVAILABLE</li>
                      <li>RESULT_TOUCHID_ERRO</li>
                      <li>RESULT_JAILBREAK</li>
                      <li>RESULT_WRONG_PARAM</li>
                      <li>RESULT_UNKNOWN</li>
                </ul>
            </td>
         </tr>
         <tr>
             <td>"12"</td>
             <td>错误描述</td>
             <td>本地认证操作已被取消</td>
         </tr>
         <tr>
             <td>"14"</td>
             <td>错误描述</td>
             <td>系统验证失败</td>
         </tr>
         <tr>
             <td>"16"</td>
             <td>错误描述</td>
             <td>本地认证操作已被取消并跳转到其他操作</td>
         </tr>
         <tr>
             <td>"0"</td>
             <td>需要同步到服务器的报文数据</td>
             <td>数据经过签名，可保证不会被篡改</td>
         </tr>
     </table>

 ```c
 typedef enum {

     RESULT_USER_CANCEL,         //用户点击了'cancel'
     RESULT_NOT_SUPPORT,         //系统版本低于iOS8
     RESULT_SYSTEM_CANCEL,       //被其他进程抢占，如来电
     RESULT_PASSCODE_NOTSET,     //passcode未设置
     RESULT_NO_MATCH,            //指纹不匹配
     RESULT_FALLBACK,            //用户点击了'Enter Passcode'
     RESULT_NOT_ENROLLED,        //未录入指纹
     RESULT_NOT_AVAILABLE,       //不可用
     RESULT_TOUCHID_ERRO,        //系统指纹异常
     RESULT_JAILBREAK,           //该机器越狱 (此状态码不可用)
     RESULT_WRONG_PARAM,         //参数不对
     RESULT_UNKNOWN,             //其他异常

 } IFAABioResult;
 ```
 */
- (void) auth:(NSString *)msg ifaaCallback:(IFAACallback) ifaaCallback;

@end
